﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using DAL.Entity;


namespace DAL.Persistencia
{
    public class SupplierDAL
    {
        private NewTierraEntities Con;

        public SupplierDAL()
        {
            Con = new NewTierraEntities();
        }
            
        //Método para gravar um registro na tabela Supplier
        public void Salvar(Supplier c)
        {
            try
            {
                //Provedor de Conexão do EntityFramework
                NewTierraEntities Con = new NewTierraEntities();

                //Rotinas prontas para o banco de dados
                Con.AddToSuppliers(c); //insert into Supplier values...
                Con.SaveChanges(); //Executar a operação
            }
            catch
            {
                throw;
            }
        }

        //Método para Excluir o Supplier na base
        public void Excluir(Supplier c)
        {
            try
            {
                Con.DeleteObject(c); //Prepara a deleção
                Con.SaveChanges(); //Executa a transação (commit)
            }
            catch
            {
                throw;
            }
        }

        //Metodo para listar todos os Supplier cadastrados
        public List<Supplier> ListarTodos()
        {
            try
            {
                //SQL -> select * from Suppliers
                return Con.Suppliers.ToList();
            }
            catch
            {
                throw;
            }
        }

        //Método para Consultar todos os Suppliers por status
        public List<Supplier> FindAllStatus(int IdStatus) 
        {
            try
            {
                //select * from TbProduto where Nome like ?
                return Con.Suppliers.Where(p => p.STATUS_id.Equals(IdStatus)).ToList();
                //Expressões LAMBDA
                /*
                 * StartsWith   -> Começa com
                 * EndsWith     -> Termina com
                 * Contains     -> Contendo
                 * Equals       -> Exatamente igual
                 */
            }
            catch
            {
                throw; //Lançar a exceção adiante...
            }
        }

        //Método para Consultar todos os Suppliers por tipo
        public List<Supplier> FindAllTipo(int IdTipo) 
        {
            try
            {
                //select * from TbProduto where Nome like ?
                return Con.Suppliers.Where(p => p.TIPOSUPL_id.Equals(IdTipo)).ToList();
                //Expressões LAMBDA
                /*
                 * StartsWith   -> Começa com
                 * EndsWith     -> Termina com
                 * Contains     -> Contendo
                 * Equals       -> Exatamente igual
                 */
            }
            catch
            {
                throw; //Lançar a exceção adiante...
            }
        }

        //Método para Consultar todos os Suppliers por tipo
        public Supplier FindAllNome(string nome) 
        {
            try
            {
                //select * from TbProduto where Nome like ?
                return Con.Suppliers.Where(p => p.S_nome.Contains(nome)).Single();
                //Expressões LAMBDA
                /*
                 * StartsWith   -> Começa com
                 * EndsWith     -> Termina com
                 * Contains     -> Contendo
                 * Equals       -> Exatamente igual
                 */
            }
            catch
            {
                throw; //Lançar a exceção adiante...
            }
        }

        public List<Supplier> ListarTodos(string nome)
        {
            try
            {
                    return Con.Suppliers.Where(t => t.S_nome.Contains(nome)).ToList();
            }
            catch
            {
                throw;
            }
        }

        //Método para obter 1 Supplier pelo Id
        public Supplier ObterPorId(int IdSupplier)
        {
            try
            {
                //select * from TbCliente where IdCliente = ?
                return Con.Suppliers.Where(c => c.S_id == IdSupplier).Single();

                //Single -> Retorna apenas 1 Registro e dá erro para qualquer
                //          resultado diferente de 1 Registro.
            }
            catch
            {
                throw;
            }
        }

        public bool ObterPorNome(string nome)
        {
            try
            {
                return Con.Suppliers.Where(s => s.S_nome.Equals(nome)).Count() != 0;
            }
            catch
            {
                throw;
            }
        }

        //Método para atualizar os dados do Supplier
        public void Atualizar(Supplier registroNovo)
        {
            try
            {
                //Buscar na base de dados o Registro antigo
                Supplier registroAntigo = ObterPorId(registroNovo.S_id);

                //Atualizando os dados
                registroAntigo.S_nome = registroNovo.S_nome;
                registroAntigo.S_razaosocial = registroNovo.S_razaosocial;
                registroAntigo.S_cnpj = registroNovo.S_cnpj;
                registroAntigo.S_endereco = registroNovo.S_endereco;
                registroAntigo.S_teleplantao = registroNovo.S_teleplantao;
                registroAntigo.S_telefone = registroNovo.S_telefone;
                registroAntigo.S_endereco = registroNovo.S_endereco;
                registroAntigo.S_http = registroNovo.S_http;
                registroAntigo.S_email = registroNovo.S_email;
                registroAntigo.STATUS_id = registroNovo.STATUS_id;
                registroAntigo.TIPOSUPL_id = registroNovo.TIPOSUPL_id;
                registroAntigo.CID_id = registroNovo.CID_id;
                registroAntigo.PAIS_id = registroNovo.PAIS_id;
                registroAntigo.Categ_id = registroNovo.Categ_id;
                registroAntigo.Rede_id = registroNovo.Rede_id;

                //Executo a transação
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }
        }

        //Método para atualizar os dados do Supplier
        public void Atualizar(Int32 SupplierID, Int32 categoria)
        {
            try
            {
                //Buscar na base de dados o Registro antigo
                Supplier registroAntigo = ObterPorId(SupplierID);

                //Atualizando os dados
                registroAntigo.Categ_id = categoria;

                //Executo a transação
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }
        }




    }
}
